﻿//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using Brouteforce.NewManagers;
//using Brouteforce.gameObjs;
//using Brouteforce.gameobjs;
//using Brouteforce.utilities;
//using Microsoft.Xna.Framework;
//using Microsoft.Xna.Framework.Input;

//namespace Brouteforce.uiOld {
//    public class Textbox : ISelectableGameObject{
//        private const int TextPadding = 1;
//        private const int BorderSize = 1;
        
//        private const string AllTextInput = @"ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-`~;,[]{}|\*!@#$%^&()+=. ";
//        private const string OnlyNumberTextInput = "1234567890";

//        public Location Location;
//        public bool Focused = false;
//        public string Text = "";
//        public int MaximumChars = 10;
//        public bool AllowOnlyNumbers = false;
//        public string Label = "";

//        public Textbox(Location location) {
//            this.Location = location;
//        }

//        public Textbox(Location location, String label) {
//            this.Location = location;
//            this.Label = label;
//        }

//        /// <summary> 
//        /// Convert a key to it's respective character or escape sequence. 
//        /// </summary> 
//        /// <param name="key">The key to convert.</param> 
//        /// <param name="shift">Is the shift key pressed or caps lock down.</param> 
//        /// <returns>The char for the key that was pressed or string.Empty if it doesn't have a char representation.</returns> 
//        public static string ConvertKeyToChar(Keys key, bool shift) {
//            switch (key) {
//                case Keys.Space: return " ";

//                // Escape Sequences 
//                case Keys.Enter: return "\n";                         // Create a new line 
//                case Keys.Tab: return "\t";                           // Tab to the right 

//                // D-Numerics (strip above the alphabet) 
//                case Keys.D0: return shift ? ")" : "0";
//                case Keys.D1: return shift ? "!" : "1";
//                case Keys.D2: return shift ? "@" : "2";
//                case Keys.D3: return shift ? "#" : "3";
//                case Keys.D4: return shift ? "$" : "4";
//                case Keys.D5: return shift ? "%" : "5";
//                case Keys.D6: return shift ? "^" : "6";
//                case Keys.D7: return shift ? "&" : "7";
//                case Keys.D8: return shift ? "*" : "8";
//                case Keys.D9: return shift ? "(" : "9";

//                // Numpad 
//                case Keys.NumPad0: return "0";
//                case Keys.NumPad1: return "1";
//                case Keys.NumPad2: return "2";
//                case Keys.NumPad3: return "3";
//                case Keys.NumPad4: return "4";
//                case Keys.NumPad5: return "5";
//                case Keys.NumPad6: return "6";
//                case Keys.NumPad7: return "7";
//                case Keys.NumPad8: return "8";
//                case Keys.NumPad9: return "9";
//                case Keys.Add: return "+";
//                case Keys.Subtract: return "-";
//                case Keys.Multiply: return "*";
//                case Keys.Divide: return "/";
//                case Keys.Decimal: return ".";

//                // Alphabet 
//                case Keys.A: return shift ? "A" : "a";
//                case Keys.B: return shift ? "B" : "b";
//                case Keys.C: return shift ? "C" : "c";
//                case Keys.D: return shift ? "D" : "d";
//                case Keys.E: return shift ? "E" : "e";
//                case Keys.F: return shift ? "F" : "f";
//                case Keys.G: return shift ? "G" : "g";
//                case Keys.H: return shift ? "H" : "h";
//                case Keys.I: return shift ? "I" : "i";
//                case Keys.J: return shift ? "J" : "j";
//                case Keys.K: return shift ? "K" : "k";
//                case Keys.L: return shift ? "L" : "l";
//                case Keys.M: return shift ? "M" : "m";
//                case Keys.N: return shift ? "N" : "n";
//                case Keys.O: return shift ? "O" : "o";
//                case Keys.P: return shift ? "P" : "p";
//                case Keys.Q: return shift ? "Q" : "q";
//                case Keys.R: return shift ? "R" : "r";
//                case Keys.S: return shift ? "S" : "s";
//                case Keys.T: return shift ? "T" : "t";
//                case Keys.U: return shift ? "U" : "u";
//                case Keys.V: return shift ? "V" : "v";
//                case Keys.W: return shift ? "W" : "w";
//                case Keys.X: return shift ? "X" : "x";
//                case Keys.Y: return shift ? "Y" : "y";
//                case Keys.Z: return shift ? "Z" : "z";

//                // Oem 
//                case Keys.OemOpenBrackets: return shift ? "{" : "[";
//                case Keys.OemCloseBrackets: return shift ? "}" : "]";
//                case Keys.OemComma: return shift ? "<" : ",";
//                case Keys.OemPeriod: return shift ? ">" : ".";
//                case Keys.OemMinus: return shift ? "_" : "-";
//                case Keys.OemPlus: return shift ? "+" : "=";
//                case Keys.OemQuestion: return shift ? "?" : "/";
//                case Keys.OemSemicolon: return shift ? ":" : ";";
//                case Keys.OemQuotes: return shift ? "\"" : "'";
//                case Keys.OemPipe: return shift ? "|" : "\\";
//                case Keys.OemTilde: return shift ? "~" : "`";
//            }

//            return string.Empty;
//        } 

//        public void Update() {
//            if (!Focused && InputManager.IsMouseClickedOn(Location)) Focused = true;
            
//            if (Focused) {
//                var pressed = InputManager.CurrentClickedKeys;
//                if (pressed.Count > 0){
//                    String key = ConvertKeyToChar(pressed[0], InputManager.IsShiftDown);
//                    if (pressed[0] == Keys.Delete || pressed[0] == Keys.Back) {
//                        if (Text.Length > 0) {
//                            Text = Text.Substring(0, Text.Length - 1);
//                        }
//                    } else if (Text.Length >= MaximumChars) {
//                        return;
//                    } else if (!AllowOnlyNumbers && AllTextInput.Contains(key)){
//                        Text += key;
//                    } else if (AllowOnlyNumbers && OnlyNumberTextInput.Contains(key)){
//                        Text += key;
//                    }
//                }
//            }
//        }

//        public void Draw(int cameraX, int cameraY) {
//            Draws.DrawString(Location, Label);

//            var left = Location.CropLeft((int) (Draws.NormalFontSize.X*Label.Length) + TextPadding);
//            Draws.DrawBlank(left, Color.Black);
//            Draws.DrawBorder(left, (Focused? Color.OrangeRed: Color.Gray), BorderSize);
//            Draws.DrawString(left.Position.X + TextPadding, left.Position.Y + TextPadding, Text);
//        }

//        public bool Selected{
//            get { return Focused; }
//            set { Focused = value; }
//        }

//        public int TextAsInteger{
//            get { return (Text.Length == 0? 0 : Convert.ToInt32(Text)); }
//        }
//    }
//}
